package com.hainiu.cat.interview.nio;

import java.nio.IntBuffer;

/**
 *
 * BIO是以流的方式处理数据的
 * NIO是以块的方式处理数据的
 * 块IO的效率比流IO的效率高很多
 *
 * BIO是阻塞的，NIO是非阻塞的
 *
 * BIO是以字节流·字符流处理数据，
 *
 * NIO是以通道（channel）和缓冲区（buffer）进行操作，Selector用于监听多个通道的事件，因此使用单个线程可以监听多个客户端通道
 * 1）、每个channel都对应一个buffer
 * 2)、一个Selector对应一个线程，一个线程对应多个channel(一个channel可以理解成一个连接)
 * 3）、多个channel注册到一个Selector
 * 4)、程序切换到哪个channel由事件决定的（Event）
 * 5）、Selector会根据不同的事件在各个通道上切换
 * 6）、Buffer就是一个内存块，底层是有一个数组的
 * 7）、数据的读取或者是写入是通过Buffer的，BIO中要么是输入流要么是输出流，不能双向，但是nio的buffer可以读也可以写，需要使用方法flip()
 * 8)、channel也是双向的，可以反应底层操作系统的情况。（比如linux的操作系统通道就是双向的）
 */
public class BasicBuffer {


    /**
     *     mark = -1;
     *     position = 0; :下一个要被读或者写的位置
     *     limit; 可变
     *    capacity; 指定后不可改变
     */
    public static void main(String[] args) {
        IntBuffer buffer = IntBuffer.allocate(5);

        for (int i = 0; i < buffer.capacity(); i++) {
            buffer.put(i * 2);
        }

        // 读写切换 此处为必须的
        buffer.flip();


        while (buffer.hasRemaining()) {
            System.out.println(buffer.get());
        }


    }
}
